Analiza problemu coraz krótszego śledzia była złożona. Po wczytaniu danych, uzupełniono brakujące wartości. Zdecydowano się na przewidywanie wartości przez algorytm random forest. Dobór parametrów był empiryczno-losowy. Przy zmianie liczby powtórzeń oceny krzyżowej, czy wartości mtry lub seeda ranking ważności atrybutów potrafił się zmienić diametralnie, przy zbliżonej wartości miary RMSE. Próbując odpowiedzieć na pytanie dlaczego śledź oceaniczny jest coraz krótszy porównano zmiany atrybutów w czasie oraz ranking zgodny z algorytmem predykcji. Spadające początkowo natężenie połowów śledzi, temeratura przy powierzchni wody, a także oscylacja północnoatlantycka sprzyjały wzrostowi śledzia oceanicznego, a także dostępności glonów Calanus helgolandicus oraz widłonogów gatunku pierwszego. Przy wzroście połowów oraz temperatury przy powierzchni wody sytuacja zaczęła się zmieniać. Zarówno liczba zagęszczenia wspomnianych planktonów, jak i długość śledzi zaczęła spadać.
library(ggplot2)
library(plotly)
library(knitr)
library(EDAWR)
library(dplyr)
library(caret)
library(Hmisc)
library(randomForest)
opts_chunk$set(echo=FALSE, message=FALSE, warning=FALSE)Podczas wczytywania danych ustawiono wykrywanie wartości brakujących na znak ‘?’. Dodatkowo przypisano poszczególne klasy danym atrybutom. Szczególnie istotne było to w przypadku zmiennej xmonth, która oznacza konkretny miesiąc.
Poniżej zamieszczono kod pobierający dane do zmiennej ‘sledzie’.
sledzie <- read.csv("sledzie.csv", dec = ".", na.strings = "?", colClasses=c(rep('numeric', 9), rep('integer', 1), rep('numeric', 4), rep('factor', 1), rep('numeric', 1)))Sprawdzono, że kolumny zawierające wartości brakujące to: cfin1, cfin2, chel1, chel2, lcop1, lcop2, sst. Zauważono, że dla jednej wartości totaln ww. atrybuty mają te same wartości. Wykorzystano to spostrzeżenie do utworzenia tabeli pomocniczej, w której oszacowano brakujące dane. Algorytm wyznaczania brakującej wartości grupuje tabelę po zmiennej totaln i dla każdej grupy tworzy rekord w tabeli pomocniczej z medianami kolejnych argumentów.
Następnie dla każdego z argumentu wyznaczano krotki z brakującymi wartościami i dla każdej takiej pozycji przypisywano wartość z tabeli pomocniczej.
Poniżej kod przedstawiający stworzenie tabeli pomocniczej.
# Tabela pomocnicza z medianą wartości poszczególnych atrybutów dla każdej grupy totaln
tmpTable <- sledzie %>% group_by(totaln) %>% arrange(totaln) %>% summarise( cfin1 = median(cfin1, na.rm = TRUE), cfin2 = median(cfin2, na.rm = TRUE), chel1 = median(chel1, na.rm = TRUE), chel2 = median(chel2, na.rm = TRUE), lcop1 = median(lcop1, na.rm = TRUE), lcop2 = median(lcop2, na.rm = TRUE), sst = median(sst, na.rm = TRUE)) Dalej na przykładzie zmiennej CFIN1 uzupełnienie brakujących wartości
# Uzupełnienie CFIN1
a<-sledzie %>% select(X, cfin1, totaln) %>% filter(is.na(cfin1))
for(i in 1:length(a[,1])){
sledzie$cfin1[a$X[i]+1] <- as.numeric(tmpTable %>% filter(totaln==sledzie$totaln[a$X[i]+1]) %>% select(cfin1))
}Pozostałe atrybuty zostały uzupełnione w analogiczny sposób.
Zbiór posiada 52.582 pozycji. Każda pozycja określona jest zbiorem atrybutów, których podstawowe dane przedstawiono w tabeli.
| X | length | cfin1 | cfin2 | chel1 | chel2 | lcop1 | lcop2 | fbar | recr | cumf | totaln | sst | sal | xmonth | nao | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min. : 0 | Min. :19.0 | Min. : 0.0000 | Min. : 0.0000 | Min. : 0.000 | Min. : 5.238 | Min. : 0.3074 | Min. : 7.849 | Min. :0.0680 | Min. : 140515 | Min. :0.06833 | Min. : 144137 | Min. :12.77 | Min. :35.40 | 8 : 9920 | Min. :-4.89000 | |
| 1st Qu.:13145 | 1st Qu.:24.0 | 1st Qu.: 0.0000 | 1st Qu.: 0.2778 | 1st Qu.: 2.469 | 1st Qu.:13.427 | 1st Qu.: 2.5479 | 1st Qu.:17.808 | 1st Qu.:0.2270 | 1st Qu.: 360061 | 1st Qu.:0.14809 | 1st Qu.: 306068 | 1st Qu.:13.60 | 1st Qu.:35.51 | 10 : 7972 | 1st Qu.:-1.89000 | |
| Median :26291 | Median :25.5 | Median : 0.1111 | Median : 0.7012 | Median : 5.750 | Median :21.435 | Median : 7.0000 | Median :24.859 | Median :0.3320 | Median : 421391 | Median :0.23191 | Median : 539558 | Median :13.86 | Median :35.51 | 7 : 6922 | Median : 0.20000 | |
| Mean :26291 | Mean :25.3 | Mean : 0.4432 | Mean : 2.0257 | Mean : 9.988 | Mean :21.219 | Mean : 12.8042 | Mean :28.422 | Mean :0.3304 | Mean : 520367 | Mean :0.22981 | Mean : 514973 | Mean :13.87 | Mean :35.51 | 9 : 5714 | Mean :-0.09236 | |
| 3rd Qu.:39436 | 3rd Qu.:26.5 | 3rd Qu.: 0.3333 | 3rd Qu.: 1.7936 | 3rd Qu.:11.500 | 3rd Qu.:27.193 | 3rd Qu.: 21.2315 | 3rd Qu.:37.232 | 3rd Qu.:0.4560 | 3rd Qu.: 724151 | 3rd Qu.:0.29803 | 3rd Qu.: 730351 | 3rd Qu.:14.16 | 3rd Qu.:35.52 | 6 : 4218 | 3rd Qu.: 1.63000 | |
| Max. :52581 | Max. :32.5 | Max. :37.6667 | Max. :19.3958 | Max. :75.000 | Max. :57.706 | Max. :115.5833 | Max. :68.736 | Max. :0.8490 | Max. :1565890 | Max. :0.39801 | Max. :1015595 | Max. :14.73 | Max. :35.61 | 5 : 3736 | Max. : 5.08000 | |
| NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | (Other):14100 | NA |
W tym punkcie zostaną przedstawione wykresy z zależności między zmiennymi. Badanie korelacji podzielono na dwa obszary: a) korelacja między wszystkimi atrybutami - przedstawiono wykresy dla najbardziej zależnych wartości
b) korelacja atrybutów z rozpatrywaną zmienną długości śledzi - W tym przypadku okazało się, że zmienna length najbardziej skorelowana jest z sst (-0.45), następnie z nao(-0.26), fbar(0.25), lcop1(0.24), chel1(0.22)
Do przewidzenia długości śledzi zastosowano metodę random forest. Podzielono zbiór danych na treningowy i testowy. Dane treningowe zajmowały 75% wszysktich rekordów. Do stworzenia modelu wykorzystano powtórzoną ocenę krzyżową o parametrach podziału na 2 podzbiory i 5 powtórzeniach. Dodatkowo optymalizacja atrybutów miała ulepszać miarę RMSE.
## RMSE Rsquared
## 1.1798606 0.4867333
Zgodnie z parametrami algorytmu regresji wynika, że największy udział ma zmienna cumf, czyli łączne roczne natężenie połowów. Zmienna ta jest o tyle zaskakująca, że przy wyliczaniu korelacji z atrybutem length miała wartość 0.01. Drugą co do ważności zmienną jest sst, czyli liczba stopni przy powierzchni wody. Wydaje się, że to jest bardziej prawdopodobne i ma potwierdzenie w korelacji ze zmienną length. Niestety dla algorytmu regresji random forest, rozkład udziału poszczególnych atrybutów jest bardzo zmienny. W zależności od wartości parametrów tj. liczby powtórzeń w algorytmie oceny krzyżowej, czy zmeinnej mtry, a także ustawionego seeda, ranking widocznie się zmieniał, przy zbliżonych wartościach miary RMSE.